-- @Author: 作者QQ381990860
-- @Date:   2021-11-05 10:34:34
-- @Last Modified by:   作者QQ201878826
-- @Last Modified time: 2022-08-27 16:43:12

local 自适应 = class()
local 适应组 = {}
local floor = math.floor
local __jls = require("gge精灵类")

function 自适应:加载(根)
	local 资源 = 根.资源
    适应组[0] = {[0]=资源:载入('UI.dll',"网易WDF动画",0x00000010).精灵} -- UI的背景底图
	适应组[1] = {[0]=资源:载入('UI.dll',"网易WDF动画",0x00000018).精灵} -- UI的后置标题背景

    适应组[3] = {[0]=资源:载入('UI.dll',"网易WDF动画",0x00000007).精灵}  -- 浅色条形输入背景  高18  00000007  llm.dll',"网易WDF动画",0xB74E6CA1
	适应组[35] = {[0]=资源:载入('UI.dll',"网易WDF动画",0x00000008).精灵} -- 深色条形输入背景  高19
	适应组[36] = {[0]=资源:载入('UI.dll',"网易WDF动画",0x00000005).精灵} -- 经验条背景

	适应组[37] = {[0]=资源:载入('UI.dll',"网易WDF动画",0x00000038).精灵} -- 符石镶嵌 半透明背景装饰

    适应组[2] = {[0]=资源:载入('UI.dll',"网易WDF动画",0x00000026).精灵} -- UI的方形白色背景
	适应组[4] = {[0]=资源:载入('UI.dll',"网易WDF动画",0x00000027).精灵} -- UI的方形蓝色带标题背景

	适应组[7] = {[0]=资源:载入('UI.dll',"网易WDF动画",0x00000025).精灵} -- UI的方形蓝色带右侧下拉栏背景
	适应组[8] = {[0]=资源:载入('UI.dll',"网易WDF动画",0x00000028).精灵} -- UI的方形蓝色带标题带右侧下拉栏背景

	适应组[5] = {[0]=资源:载入('UI.dll',"网易WDF动画",0x00000029).精灵} -- 梦幻的文字信息栏背景 设置页面的
	适应组[6] = {[0]=资源:载入('JM.dll',"网易WDF动画",0xB5FDF1AC).精灵} -- 半透明背景框
    --适应组[6] = {[0]=资源:载入('llm.dll',"网易WDF动画",0xEE0BCB8A).精灵} -- 半透明背景框
	适应组[9] = {[0]=资源:载入('JM.dll',"网易WDF动画",0xF5B6E157).精灵} -- 梦幻的风格喊话背景

	适应组[70] = {[0]=资源:载入('JM.dll',"网易WDF动画",0xB5FDF1AC).精灵} -- 半透明背景框
	适应组[71] = {[0]=资源:载入('JM.dll',"网易WDF动画",0x80E0B578).精灵} -- 半透明白边背景
	适应组[72] = {[0]=资源:载入('JM.dll',"网易WDF动画",0x003C5980).精灵} -- 音乐音移动条效背景
	适应组[28] = {[0]=资源:载入('JM.dll',"网易WDF动画",0x802EB60A).精灵} -- 对话框鼠标指向背景



	-- 按钮组
	适应组[10] = {按钮=资源:载入('UI.dll',"网易WDF动画",0x00000040)}--高20
	适应组[11] = {按钮=资源:载入('UI.dll',"网易WDF动画",0x00000041)}--高20'llm.dll',"网易WDF动画",0xCD9700B7
	适应组[12] = {按钮=资源:载入('UI.dll',"网易WDF动画",0x00000042)}--高20
	适应组[13] = {按钮=资源:载入('云纹按钮',"动画")}--高20
	适应组[14] = {按钮=资源:载入('UI.dll',"网易WDF动画",0x00000044)}--高20
    适应组[15] = {按钮=资源:载入('UI.dll',"网易WDF动画",0x00000046)}--高26
    适应组[16] = {按钮=资源:载入('UI.dll',"网易WDF动画",0x00000047)}--高22
    适应组[17] = {按钮=资源:载入('JM.dll',"网易WDF动画",0xF11233BB)} --  无用
	适应组[18] =  {按钮=资源:载入('关闭按钮',"动画")}-- 关闭按钮

	适应组[19] = {按钮=资源:载入('JM.dll',"网易WDF动画",0x5DE92E5D)} -- 单独的方块小按钮

	适应组[20] = {按钮=资源:载入('UI.dll',"网易WDF动画",0x00000062)} -- 上翻18*19
	适应组[24] = {按钮=资源:载入('UI.dll',"网易WDF动画",0x00000063)} --------- 滑块15*604
	适应组[21] = {按钮=资源:载入('UI.dll',"网易WDF动画",0x00000061)} -- 下翻18*19

	适应组[31] = {按钮=资源:载入('JM.dll',"网易WDF动画",0x335CECBC)} -- 小上翻10*13
	适应组[33] = {按钮=资源:载入('JM.dll',"网易WDF动画",0x7F027E7B)}-----------滑块10*32
	适应组[32] = {按钮=资源:载入('JM.dll',"网易WDF动画",0xB7F2FF5E)} -- 小下翻10*13

	适应组[22] = {按钮=资源:载入('JM.dll',"网易WDF动画",0xB05126E8)} -- 道具左翻
	适应组[23] = {按钮=资源:载入('JM.dll',"网易WDF动画",0x26066130)} -- 道具右翻

	适应组[25] = {按钮=资源:载入('llm.dll',"网易WDF动画",0x2230CDEC)} -- 加点加
	适应组[26] = {按钮=资源:载入('llm.dll',"网易WDF动画",0x5E0D32BF)} -- 加点减
 	适应组[27] = {按钮=资源:载入('UI.dll',"网易WDF动画",0x00000020)} -- 分页按钮

	适应组[29] = {按钮=资源:载入('JM.dll',"网易WDF动画",0xC9BF8D1E)} -- 方形的打钩按钮
	适应组[30] = {按钮=资源:载入('JM.dll',"网易WDF动画",0xB5D15C45)} -- 圆形的打钩按钮

    适应组[51] = {按钮=资源:载入('JM.dll',"网易WDF动画",0xD330CE3F)}--大分区
    适应组[52] = {按钮=资源:载入('JM.dll',"网易WDF动画",0xBD57A592)}--小分区

--------------------------------------------------------------------
--- 1-9资源  28资源  35-50预定资源
--- 10-27按钮  29-30按钮  31-34按钮
--------------------------------------------------------------------
	for n=10,27 do
		if 适应组[n] ~= nil then
			适应组[n][0] = 适应组[n].按钮.精灵.纹理
			for i=1,3 do
			    适应组[n].按钮.当前帧 = 适应组[n].按钮.当前帧 + 1
			    适应组[n].按钮:更新纹理()
			    适应组[n][i] = 适应组[n].按钮.精灵.纹理
			end
			适应组[n].按钮 = nil
			for i=1,4 do
				适应组[n][i-1] = __jls(适应组[n][i-1])
			end
		end
	end

	for n=29,30 do
		if 适应组[n] ~= nil then
			适应组[n][0] = 适应组[n].按钮.精灵.纹理
			for i=1,5 do
			    适应组[n].按钮.当前帧 = 适应组[n].按钮.当前帧 + 1
			    适应组[n].按钮:更新纹理()
			    适应组[n][i] = 适应组[n].按钮.精灵.纹理
			end
			适应组[n].按钮 = nil
			for i=1,5 do
				适应组[n][i-1] = __jls(适应组[n][i-1])
				if i-1 ~= 2 then
					适应组[n][i-1]._obj:SetTextureRect(0,0,26,适应组[n][i-1].高度-2)
				end
			end

		end
	end

	for n=31,34 do
		if 适应组[n] ~= nil then
			适应组[n][0] = 适应组[n].按钮.精灵.纹理
			for i=1,3 do
			    适应组[n].按钮.当前帧 = 适应组[n].按钮.当前帧 + 1
			    适应组[n].按钮:更新纹理()
			    适应组[n][i] = 适应组[n].按钮.精灵.纹理
			end
			适应组[n].按钮 = nil
			for i=1,4 do
				适应组[n][i-1] = __jls(适应组[n][i-1])
			end
		end
	end

	for n=51,52 do
		if 适应组[n] ~= nil then
			适应组[n][0] =适应组[n].按钮.精灵.纹理
			for i=1,3 do
			    适应组[n].按钮.当前帧 = 适应组[n].按钮.当前帧 + 1
			    适应组[n].按钮:更新纹理()
			    适应组[n][i] = 适应组[n].按钮.精灵.纹理
			end
			适应组[n].按钮 = nil
			for i=1,4 do
				适应组[n][i-1] = __jls(适应组[n][i-1])
			end
		end
	end


	-- 开始处理图像
	local 九格组 = {0,2,4,5,6,7,8,9,37,70,71}
	local 横排组 = {1,3,10,11,12,13,14,15,16,28,35,36,51,52,72}
	local 竖排组 = {24,27}
	
	for i=1,#九格组 do
		local 大小 = 70
		if 九格组[i] == 70 or 九格组[i] == 9 or 九格组[i] == 71 then
			大小 = 12
		end
		local 间宽 = 适应组[九格组[i]][0].宽度 - 大小
		local 间高 = 适应组[九格组[i]][0].高度 - 大小
		local 纹理 = 适应组[九格组[i]][0].纹理
		适应组[九格组[i]].左上 = {}
		适应组[九格组[i]].右上 = {}
		适应组[九格组[i]].左下 = {}
		适应组[九格组[i]].右下 = {}
		适应组[九格组[i]].左上[0] = 纹理:复制区域(0,0,650,475)
		适应组[九格组[i]].左下[0] = 纹理:复制区域(0,间高,650,大小)
		适应组[九格组[i]].右上[0] = 纹理:复制区域(间宽,0,大小,475)
		适应组[九格组[i]].右下[0] = 纹理:复制区域(间宽,间高,大小,大小)
		适应组[九格组[i]].大小 = 大小
		适应组[九格组[i]][0] = nil
	end

	for i=1,#横排组 do
		local 间宽 =  适应组[横排组[i]][0].宽度 - 10
		local 间高 = 适应组[横排组[i]][0].高度
		local 纹理 = 适应组[横排组[i]][0].纹理
		适应组[横排组[i]].左边 = {}
		适应组[横排组[i]].中心 = {}
		适应组[横排组[i]].右边 = {}
		适应组[横排组[i]].左边[0] = 纹理:复制区域(0,0,600,间高)

		适应组[横排组[i]].右边[0]= 横排组[i]==98 and 纹理:复制区域(间宽-15,0,25,间高) or 纹理:复制区域(间宽,0,10,间高)
		
		if 横排组[i]==51 or 横排组[i]==52 then
			适应组[横排组[i]].左边[0] =require("gge纹理类")():空白纹理()
			适应组[横排组[i]].右边[0] =require("gge纹理类")():空白纹理()
		end

		for n=1,#适应组[横排组[i]] do
			纹理 = 适应组[横排组[i]][0+n].纹理
			适应组[横排组[i]].左边[0+n] = 纹理:复制区域(0,0,600,间高)
			适应组[横排组[i]].右边[0+n] = 纹理:复制区域(间宽,0,10,间高)
			适应组[横排组[i]][0+n] = nil
		end
		适应组[横排组[i]][0] = nil
	end

	for i=1,#竖排组 do
		print(竖排组[i])
		local 间宽 = 适应组[竖排组[i]][0].宽度
		local 间高 = 适应组[竖排组[i]][0].高度 - 37
		local 纹理 = 适应组[竖排组[i]][0].纹理
		适应组[竖排组[i]].上边 = {}
		适应组[竖排组[i]].中心 = {}
		适应组[竖排组[i]].下边 = {}
		适应组[竖排组[i]].上边[0] = 纹理:复制区域(0,0,间宽,适应组[竖排组[i]][0].高度)
		适应组[竖排组[i]].下边[0] = 纹理:复制区域(0,间高,间宽,37)
		for n=1,#适应组[竖排组[i]] do
			纹理 = 适应组[竖排组[i]][0+n].纹理
			适应组[竖排组[i]].上边[0+n] = 纹理:复制区域(0,0,间宽,适应组[竖排组[i]][0].高度)
			适应组[竖排组[i]].下边[0+n] = 纹理:复制区域(0,间高,间宽,37)
			适应组[竖排组[i]][0+n] = nil
		end
		适应组[竖排组[i]][0] = nil
	end

	collectgarbage("collect");
end

function 自适应:初始化(纹理号,数量,宽度,高度,适应方式) -- 组,文件数量,宽度,高度（横适应，竖适应，九宫格）
	if 纹理号 == nil then
		return
	end
	self.x,self.y = 0,0
	self.纹理号 = 纹理号 
	self.当前帧 = 0 
	self.宽度 = 宽度 
	self.高度 = 高度 
	self.数量 = 数量
	local 精灵 = 适应组[纹理号]
	self.大小 = 精灵.大小
	if 适应方式 == 1 then
		self.适应组 = {}
		for i=1,数量-1 do
			self.适应组[数量] = {}
		end
		self.适应组[0] = {}
		self.适应组[0][1] = __jls(精灵.左边[0],nil,nil,nil,nil,1)
		self.适应组[0][1]._obj:SetTextureRect(0,0,self.宽度-10,self.高度)
		self.适应组[0][2] = __jls(精灵.右边[0],nil,nil,nil,nil,1)
		self.适应组[0][2]._obj:SetHotSpot(-self.宽度+10,0)
		if 数量 > 1 then
			for i=1,数量-1 do
				self.适应组[0+i] = {}
				self.适应组[0+i][1] = __jls(精灵.左边[0+i],nil,nil,nil,nil,1)
				self.适应组[0+i][1]._obj:SetTextureRect(0,0,self.宽度-10,self.高度)
				self.适应组[0+i][2] = __jls(精灵.右边[0+i],nil,nil,nil,nil,1)
				self.适应组[0+i][2]._obj:SetHotSpot(-self.宽度+10,0)
			end
		end
	elseif 适应方式 == 3  then
		self.适应组 = {}
		self.适应组[1] = __jls(精灵.左上[0],nil,nil,nil,nil,1)
		self.适应组[1]._obj:SetTextureRect(0,0,宽度-self.大小,高度-self.大小)
		self.适应组[2] = __jls(精灵.左下[0],nil,nil,nil,nil,1)
		self.适应组[2]._obj:SetTextureRect(0,0,宽度-self.大小,self.大小)
		self.适应组[2]._obj:SetHotSpot(0,-高度+self.大小)
		self.适应组[3] = __jls(精灵.右上[0],nil,nil,nil,nil,1)
		self.适应组[3]._obj:SetTextureRect(0,0,self.大小,高度-self.大小)
		self.适应组[3]._obj:SetHotSpot(-宽度+self.大小,0)
		self.适应组[4] = __jls(精灵.右下[0],nil,nil,nil,nil,1)
		self.适应组[4]._obj:SetHotSpot(-宽度+self.大小,-高度+self.大小)
 



	elseif 适应方式 == 2 then
		self.适应组 = {}
		for i=1,数量-1 do
			self.适应组[数量] = {}
		end
		self.适应组[0] = {}
		self.适应组[0][1] = __jls(精灵.上边[0],nil,nil,nil,nil,1)
		self.适应组[0][1]._obj:SetTextureRect(0,0,self.宽度,self.高度-37)
		self.适应组[0][2] = __jls(精灵.下边[0],nil,nil,nil,nil,1)
		self.适应组[0][2]._obj:SetHotSpot(0,-self.高度+37)
		if 数量 > 1 then
			for i=1,数量-1 do
				self.适应组[0+i] = {}
				self.适应组[0+i][1] = __jls(精灵.上边[0+i],nil,nil,nil,nil,1)
				self.适应组[0+i][1]._obj:SetTextureRect(0,0,self.宽度,self.高度-37)
				self.适应组[0+i][2] = __jls(精灵.下边[0+i],nil,nil,nil,nil,1)
				self.适应组[0+i][2]._obj:SetHotSpot(0,-self.高度+37)
			end
		end
	end
	self.适应方式 = 适应方式
end

function 自适应:置宽高(宽度,高度) -- 组,文件数量,宽度,高度（横适应，竖适应，九宫格）
	self.宽度 = 宽度 self.高度 = 高度
	if self.适应方式 == 3 then
		self.适应组[1]._obj:SetTextureRect(0,0,宽度-self.大小,高度-self.大小)
		self.适应组[2]._obj:SetTextureRect(0,0,宽度-self.大小,self.大小)
		self.适应组[2]._obj:SetHotSpot(0,-高度+self.大小)
		self.适应组[3]._obj:SetTextureRect(0,0,self.大小,高度-self.大小)
		self.适应组[3]._obj:SetHotSpot(-宽度+self.大小,0)
		self.适应组[4]._obj:SetHotSpot(-宽度+self.大小,-高度+self.大小)
	elseif self.适应方式 == 1 then
		self.适应组[0][1]._obj:SetTextureRect(0,0,宽度-10,高度)
		self.适应组[0][2]._obj:SetHotSpot(-宽度+10,0)
		for i=1,self.数量-1 do
			self.适应组[0+i][1]._obj:SetTextureRect(0,0,宽度-10,高度)
			self.适应组[0+i][2]._obj:SetHotSpot(-宽度+10,0)
		end
	elseif self.适应方式 == 2 then
		self.适应组[0][1]._obj:SetTextureRect(0,0,宽度,高度-37)
		self.适应组[0][2]._obj:SetHotSpot(0,-高度+37)
		for i=1,self.数量-1 do
			self.适应组[0+i][1]._obj:SetTextureRect(0,0,宽度,高度-37)
			self.适应组[0+i][2]._obj:SetHotSpot(0,-高度+37)
		end
	end
end

function 自适应:置宽高1(宽度,高度)
	self.适应组[0][1]._obj:SetTextureRect(0,0,宽度-10,高度)
	self.适应组[0][2]._obj:SetHotSpot(-宽度+10,0)
	for i=1,self.数量-1 do
		self.适应组[0+i][1]._obj:SetTextureRect(0,0,宽度-10,高度)
		self.适应组[0+i][2]._obj:SetHotSpot(-宽度+10,0)
	end
end

function 自适应:置宽高3(宽度,高度)
	self.适应组[1]._obj:SetTextureRect(0,0,宽度-self.大小,高度-self.大小)
	self.适应组[2]._obj:SetTextureRect(0,0,宽度-self.大小,self.大小)
	self.适应组[2]._obj:SetHotSpot(0,-高度+self.大小)
	self.适应组[3]._obj:SetTextureRect(0,0,self.大小,高度-self.大小)
	self.适应组[3]._obj:SetHotSpot(-宽度+self.大小,0)
	self.适应组[4]._obj:SetHotSpot(-宽度+self.大小,-高度+self.大小)
end

function 自适应:置区域(x,y,w,h)
	self.宽度,self.高度 = w,h
	if self.适应方式 == 3 then
		self.适应组[1]._obj:SetTextureRect(x,y,w,h)
		self.适应组[2]._obj:SetTextureRect(x,y,w,h)
		self.适应组[3]._obj:SetTextureRect(x,y,w,h)
		self.适应组[4]._obj:SetTextureRect(x,y,w,h)
	elseif self.适应方式 == 1 or self.适应方式 == 2 then
		self.适应组[self.当前帧][1]._obj:SetTextureRect(x,y,w,h)
		self.适应组[self.当前帧][2]._obj:SetTextureRect(x,y,w,h)
	elseif self.适应方式 == 4 then
		for i=0,4 do

			适应组[self.纹理号][i]._obj:SetTextureRect(x,y,w,h)
		end
	end
end

function 自适应:是否选中(x,y)
	return x>=self.x and x<=self.x+self.宽度 and y>=self.y and y<=self.y+self.高度
end

function 自适应:更新纹理()
end

function 自适应:置颜色(v,i)
	if self.适应方式 == 3 then
		self.适应组[1]._obj:SetColor(v,i or -1)
		self.适应组[2]._obj:SetColor(v,i or -1)
		self.适应组[3]._obj:SetColor(v,i or -1)
		self.适应组[4]._obj:SetColor(v,i or -1)
	elseif self.适应方式 == 1 or self.适应方式 == 2 then
		self.适应组[self.当前帧][1]._obj:SetColor(v,i or -1)
		self.适应组[self.当前帧][2]._obj:SetColor(v,i or -1)
	elseif self.适应方式 == 4 then
		适应组[self.纹理号][self.当前帧]._obj:SetColor(v,i or -1)
	end
end

function 自适应:显示(x,y)
	if self.适应方式 == 3 then
		for i=1,4 do
			self.适应组[i]._obj:SetPosition(x,y)
			self.适应组[i]._obj:Render()
		end
	elseif self.适应方式 == 1 or self.适应方式 == 2 then
		for i=1,2 do
			self.适应组[self.当前帧][i]._obj:SetPosition(x,y)
			self.适应组[self.当前帧][i]._obj:Render()
		end
	elseif self.适应方式 == 4 then
		适应组[self.纹理号][self.当前帧]._obj:SetPosition(x,y)
		适应组[self.纹理号][self.当前帧]._obj:Render()

  elseif self.适应方式 == 8 then
		适应组[self.纹理号][self.当前帧]._obj:SetPosition(x,y)
		适应组[self.纹理号][self.当前帧]._obj:Render()

	end
	self.x,self.y=x,y
end

return 自适应